//
//  SQLiteManager.m
//  02-FMDB演练
//
//  Created by heima on 16/8/16.
//  Copyright © 2016年 itcast. All rights reserved.
//

#import "SQLiteManager.h"

@implementation SQLiteManager

+ (instancetype)sharedManager {
    
    static SQLiteManager *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        
        // 打开数据
        NSString *folder = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, true) lastObject];
        NSString *path = [folder stringByAppendingPathComponent:@"carDatasourceMain.db"];
        // 后面的path就是相当于数据库的全路径
        // 会去打开数据库,如果数据库文件不存在的话.会创建并打开
        _queue = [[FMDatabaseQueue alloc] initWithPath:path];
        [self createTable];
    }
    return self;
}
#pragma mark - 执行sql语句的方法,查询数据的时候使用
- (NSArray<NSDictionary *> *)execRecordSet:(NSString *)sql {
    // 定义一个数组保存结果
    NSMutableArray *array = [NSMutableArray array];
    [_queue inDatabase:^(FMDatabase *db) {
        // 查询出来的结果集
        FMResultSet *rs = [db executeQuery:sql];
        // 判断是否还有下一行
        while ([rs next]) {
            // 初始化一个字典
            NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
            // 取到这一行有多少列
            NSInteger columnCount = [rs columnCount];
            
            // 遍历这一行中的每列
            for (int i = 0; i < columnCount; i++) {
                // 当前for循环里面就是代表每一列
                // 1. key
                // 取指定列的列名
                NSString *columnName = [rs columnNameForIndex:i];
                // 取值
                id value = [rs objectForColumnName:columnName];
                // 将值与key添加到字典里面
                [dictM setObject:value forKey:columnName];
            }
            // 将字典添加到数组中
            [array addObject:dictM];
        }
    }];
    
    return array.copy;
}
#pragma mark - 创建数据库表
- (void)createTable {
	NSString *filePath = [[NSBundle mainBundle] pathForResource:@"CYGlobalSQL.plist" ofType:nil];
	NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
	for (int i = 0; i < array.count; i++)
	{
		// 路径
		NSString *path = [[NSBundle mainBundle] pathForResource:array[i] ofType:nil];
		// 二进制数据
		NSData *data = [NSData dataWithContentsOfFile:path];
		// 转成字符串
		NSString *sql = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
		// 执行sql
		[self.queue inDatabase:^(FMDatabase *db) {
			// executeStatements: 可以一次执行多条语句,该方法一般是用来创建表的.
			BOOL result = [db executeStatements:sql];
			NSLog(@"数据表创建%@", result ? @"成功" : @"失败");
		}];
	}
}
/**
 *  数据库增/删/改的执行方法
 *
 *  @param sql sql语句
 */
-(void)excuteSql:(NSString *)sql
{
	// 执行sql
	[self.queue inDatabase:^(FMDatabase *db) {
		// executeStatements: 可以一次执行多条语句,该方法一般是用来创建表的.
		BOOL result = [db executeStatements:sql];
		NSLog(@"数据执行%@", result ? @"成功" : @"失败");
	}];
}

@end
